package br.ucb.musicbay.managedBean;

import java.util.ArrayList;
import java.util.List;
import java.util.Locale;

import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;

import br.ucb.musicbay.musica.Musica;
import br.ucb.musicbay.musica.MusicaBO;
import br.ucb.musicbay.musica.MusicaDataModel;

public class MusicaManagedBean {
	private Musica musica;
	private List<Musica> listaMusicas;
	private Musica[] musicasSelect;
	private MusicaDataModel musicaDataModel;
	
	public MusicaManagedBean() {
		setMusica(new Musica());
		setListaMusicas(new ArrayList<Musica>());
		musicaDataModel = new MusicaDataModel(getListaMusicas());
	}

	public Musica getMusica() {
		return musica;
	}

	public void setMusica(Musica musica) {
		this.musica = musica;
	}

	public List<Musica> getListaMusicas() {
		MusicaBO musicaBo = new MusicaBO();
		setListaMusicas(musicaBo.recoverAll());
		return listaMusicas;
	}

	public void setListaMusicas(List<Musica> listaMusicas) {
		this.listaMusicas = listaMusicas;
	}

	public Musica[] getMusicasSelect() {
		return musicasSelect;
	}

	public void setMusicasSelect(Musica[] musicasSelect) {
		this.musicasSelect = musicasSelect;
	}

	public MusicaDataModel getMusicaDataModel() {
		return musicaDataModel;
	}

	public void setMusicaDataModel(MusicaDataModel musicaDataModel) {
		this.musicaDataModel = musicaDataModel;
	}

	public String actionSave() {
		FacesContext context = FacesContext.getCurrentInstance();
		MusicaBO musicaBO = new MusicaBO();
		if (musicaBO.save(this.musica)) {
			if(context.getViewRoot().getLocale().equals(new Locale("en")))
				context.addMessage(null, new FacesMessage("Music " + musica.getNome() + " registered with success!"));
			else
				context.addMessage(null, new FacesMessage("Musica " + musica.getNome() + " cadastrado com sucesso!"));
			musica = null;
			return "sucesso";
		} else {
			if(context.getViewRoot().getLocale().equals(new Locale("en")))
				context.addMessage(null, new FacesMessage("Attention! Error while registering music!"));
			else
				context.addMessage(null, new FacesMessage("Atencao! Erro ao cadastrar musica!"));
			return "falha";
		}
	}

	public String actionDelete() {
		FacesContext context = FacesContext.getCurrentInstance();
		MusicaBO musicaBO = new MusicaBO();
		if (musicaBO.delete(getMusicasSelect())) {
			if(context.getViewRoot().getLocale().equals(new Locale("en")))
				context.addMessage(null, new FacesMessage("Deletion was succesful"));
			else
				context.addMessage(null, new FacesMessage("Exclusao realizada com sucesso!"));				
			musicaDataModel = new MusicaDataModel(getListaMusicas());
			return "sucesso";
		} else {
			if(context.getViewRoot().getLocale().equals(new Locale("en")))
				context.addMessage(null, new FacesMessage("Attention! Error while deleting music"));
			else
				context.addMessage(null, new FacesMessage("Atencao! Erro ao deletar musica"));
			return "falha";
		}
	}

	public String actionUpdate() {
		FacesContext context = FacesContext.getCurrentInstance();
		MusicaBO musicaBo = new MusicaBO();

		if (musicaBo.update(this.musica)) {
			if(context.getViewRoot().getLocale().equals(new Locale("en")))
				context.addMessage(null, new FacesMessage("Update was successful"));
			else
				context.addMessage(null, new FacesMessage("Atualizacao realizada com sucesso!"));
			return "sucesso";
		} else {
			if(context.getViewRoot().getLocale().equals(new Locale("en")))
				context.addMessage(null, new FacesMessage("Attention! Error while updating music"));				
			else
				context.addMessage(null, new FacesMessage("Atencao! Erro ao atualizar musica"));
			return "falha";
		}
	}
}
